Add eidetic remember/recall memory skills#2
Conversation
- **Vendored the `remember` + `recall` memory skills from eidetic-cli** (cite-don't-import) — the write/read halves of eidetic's shared `~/.eidetic/memory` surface, so this agent (Claude and its colleague backend) can persist facts across sessions and recall them later, sharing one store. `remember` drives `eidetic remember` (idempotent upsert of one JSON record or an NDJSON batch on stdin, dedup by id + content hash); `recall` drives `eidetic recall` with four search modes — exact / approximate / keyword / hybrid — each hit carrying text, full provenance metadata, a relevance score, and a freshness signal. The `.sh` wrappers are byte-verbatim from eidetic-cli (their first-party origin); each `SKILL.md` is localized only in the illustrative `--scope <nick>` examples (Provenance keeps "First-party to eidetic-cli"). Both default to this agent's PRIVATE scope, reading the suffix from `culture.yaml`. Runtime dep: the `eidetic` CLI on PATH (else a local eidetic-cli checkout with `uv`). Propagated by rollout-cli's `eidetic-memory` recipe.
CI Feedback 🧐A test triggered by this PR failed. Here is an AI-generated analysis of the failure:
|
|
PR Summary by QodoVendor eidetic remember/recall memory skills Description
Diagram
High-Level Assessment
Files changed (6)
|
Code Review by Qodo
1. Broken uv fallback lookup
|
| # ── resolve the eidetic CLI (installed tool first, then dev checkout) ──────── | ||
| EIDETIC=() | ||
| resolve_eidetic() { | ||
| if command -v eidetic >/dev/null 2>&1; then | ||
| EIDETIC=(eidetic) # installed console script — the normal case | ||
| return 0 | ||
| fi | ||
| # Dev fallback: inside the eidetic-cli checkout, run via uv. | ||
| local dir | ||
| dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) | ||
| while [ -n "$dir" ] && [ "$dir" != "/" ]; do | ||
| if [ -f "$dir/pyproject.toml" ] \ | ||
| && grep -q '^name = "eidetic-cli"' "$dir/pyproject.toml" 2>/dev/null; then | ||
| if command -v uv >/dev/null 2>&1; then | ||
| EIDETIC=(uv run --project "$dir" eidetic) | ||
| return 0 | ||
| fi | ||
| break | ||
| fi | ||
| dir=$(dirname "$dir") | ||
| done | ||
| cat >&2 <<'EOF' | ||
| error: eidetic CLI not found. | ||
| hint: install it with `uv tool install eidetic-cli` (or `pipx install eidetic-cli`), | ||
| or run from inside the eidetic-cli checkout with `uv` available. | ||
| The console script is `eidetic` (dist name: eidetic-cli). | ||
| EOF | ||
| return 1 |
There was a problem hiding this comment.
1. Broken uv fallback lookup 🐞 Bug ☼ Reliability
recall.sh/remember.sh claim a dev-checkout fallback, but resolve_eidetic() only searches for an eidetic-cli pyproject.toml in ancestor directories of the wrapper script path, so it cannot find a separate local eidetic-cli checkout when these skills are vendored into this repo. If eidetic is not on PATH, both skills will always exit with an error even when uv + a local eidetic-cli checkout are available.
Agent Prompt
### Issue description
The wrappers’ dev fallback cannot succeed in this repository because it walks up from the wrapper’s own directory and looks for `pyproject.toml` named `eidetic-cli`. Since these scripts live under `reduce-cli`, they will never be inside an `eidetic-cli` checkout, so the fallback is effectively dead code.
### Issue Context
- Current logic uses `dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)` and walks upward.
- In this repo, the only root `pyproject.toml` is `name = "reduce-cli"`, so the grep for `eidetic-cli` never matches.
### Fix Focus Areas
- .claude/skills/recall/scripts/recall.sh[16-43]
- .claude/skills/remember/scripts/remember.sh[23-50]
### Suggested fix approach
- Change the fallback search root to something that can actually be inside an `eidetic-cli` checkout (e.g., walk up from `$PWD`, or from `git rev-parse --show-toplevel`, similar to how `ask-colleague` does it).
- Optionally add an explicit override like `EIDETIC_PROJECT=/path/to/eidetic-cli` (or `EIDETIC_BIN`) that, when set, is used directly.
- Update the error hint text to match the new behavior (so it’s not instructing users to do something that can’t work).
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Vendors eidetic-cli's first-party
remember+recallmemory skills into this repo's.claude/skills/kit (cite-don't-import), giving this agent a shared, persistent memory surface (~/.eidetic/memory) that Claude and the colleague backend both read and write.remember→eidetic remember: idempotent upsert of one JSON record or an NDJSON batch on stdin (dedup by id + content hash).recall→eidetic recall: four search modes (exact / approximate / keyword / hybrid), each hit carrying text, full provenance metadata, a relevance score, and a freshness signal.The
.shwrappers are byte-verbatim from eidetic-cli (their first-party origin); this repo'sSKILL.mdscope examples are localized to its own nick. Version bumped + CHANGELOG updated per the AgentCulture rule. Runtime dep: theeideticCLI on PATH (else a local eidetic-cli checkout +uv).Propagated by rollout-cli's
eidetic-memoryrecipe (origin: agentculture/eidetic-cli). Squash-merge at your discretion.🤖 Generated with Claude Code